package fr.thelem.gestiondemandesthelem.web.actions;

import java.util.Collection;

import org.springframework.security.core.Authentication;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.context.SecurityContextHolder;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

/**
 * Classe mere des actions.
 */
public class BaseAction extends ActionSupport {

    /** Attribut serialVersionUID */
    private static final long serialVersionUID = -4242427342603024204L;

    /**
     * Récupère le contexte de la page.
     * 
     * @return action context
     */
    protected ActionContext getContext() {
        return ActionContext.getContext();
    }

    /**
     * Supprime la valeur correspondant à la clé dans la session.
     * 
     * @param cle identifie la valeur en session
     * @return l'objet correspondant à la valeur supprimée, ou null si la clé ne contenait aucune valeur.
     */
    protected Object supprimerValeurSession(String cle) {
        return ActionContext.getContext().getSession().remove(cle);
    }

    /**
     * Récupère la valeur en session correspondant à la clé donnée
     * 
     * @param cle identifie la valeur en session
     * @return l'objet, null sinon
     */
    protected Object recupererValeurSession(String cle) {
        return ActionContext.getContext().getSession().get(cle);
    }

    /**
     * Ajoute/Remplace la valeur en session correspondant à la clé donnée par la valeur donnée
     * 
     * @param cle clé
     * @param valeur valeur
     * @return la valeur anciennement associée à la clé.
     */
    protected Object ajouterValeurSession(String cle, Object valeur) {
        return ActionContext.getContext().getSession().put(cle, valeur);
    }

    /**
     * Ajouter le role admin en session pour afficher le bouton admin
     */
    protected void ajouterRoleSession() {
        Authentication auth = SecurityContextHolder.getContext().getAuthentication();
        Collection<GrantedAuthority> droits = auth.getAuthorities();
        for (GrantedAuthority d : droits) {
            if (d.getAuthority().equalsIgnoreCase("ROLE_ADMIN")) {
                this.ajouterValeurSession("role", "admin");
            }
        }
    }

}
